单例模式(数据库连接器;日志记录器)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
<?php /** * 应用场景: * 数据库连接这种比较费资源的操作; * 我们希望整个应用只实列化一次 * * 结构: * 4私1公 * 私有化构造方法:防止使用 new 创建多个实列 * 私有化克隆方法: 防止clone多个实列 * 私有化重建方法:防止反序列化 * 私有化静态属性:防止直接访问存储实列的属性 */ class Signle { //私有化静态属性:防止直接访问存储实列的属性 private static $instance = null; public static function getInstance() { if (is_null(self::$instance)) { self::$instance = new self(); } return static::$instance; } //私有化构造方法:防止使用 new 创建多个实列 private function __construct() { } //私有化重建方法:防止反序列化 private function __clone() { } //防止被反序列化 private function __wakeup() { } } |
更生动的单例、观察者、工厂、策略:https://www.cnblogs.com/zhuchenglin/p/8663038.html
策略模式:
优点:替换继承关系,避免使用多重条件转移语句,扩展性良好
缺点:客户端必须知道所有策略类,并自行决定使用哪一种策略类。
如果算法较多,则会造成很多的策略类。
这个模式设计到三个角色:
环境角色(Context):持有一个Strategy的引用
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体的策略类所需的接口
具体策略(ConcreateStrategy)角色:包装了相关的算法或行为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
<?php /** * 策略抽象类 * @author wzy */ interface Strategy { public function calPrice($price); } /** * 普通会员策略类 * @author wzy */ class PrimaryStrategy implements Strategy { public function calPrice($price) { echo "普通会员无折扣"; return $price; } } /** * 中级会员策略类 * @author wzy */ class MiddleStrategy implements Strategy { public function calPrice($price) { echo "中级会员8折优惠"; return $price * 0.8; } } /** * 高级会员策略类 * @author wzy */ class HighStrategy implements Strategy { public function calPrice($price) { echo "高级会员7折优惠"; return $price * 0.7; } } /** * Context实现类 * @author wzy */ class Price { /** * 具体的策略类对象 * @var object */ private $strategyInstance; /** * 构造函数,传入一个具体的策略对象 * * @param object $instance */ public function __construct($instance) { $this->strategyInstance = $instance; } /** * 计算货品的价格 * * @param double $price */ public function quote($price) { return $this->strategyInstance->calPrice($price); } } /** * 客户端操作 */ $high = new HighStrategy(); $priceClass = new Price($high); $price = $priceClass->quote(400); echo $price; ?> |
来源:https://www.php.cn/php-weizijiaocheng-396867.html
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - 常用设计模式